#if UNITY_STANDALONE || UNITY_ANDROID || UNITY_IOS || UNITY_WSA || UNITY_WEBGL
using UnityEngine;

namespace ActorSystem
{
    public abstract class ActorBase : MonoBehaviour
    {
        public virtual void Awake()
        {
        }

        public virtual void Start()
        {
        }

        public virtual void Update()
        {
        }
    }

    public abstract class ActorBase<A, P> : ActorBase where A : ActorBase<A, P> where P : ActorPropertyBase
    {
        public P Property;

        public override void Awake()
        {
            Property = Instantiate(Property);
        }

        public virtual void OnDamage(A target, IDamageBuff<A, P> damageBuff)
        {
        }

        public virtual void OnDeath(A target)
        {
        }

        public virtual void OnGetExp(A target)
        {
        }
    }
}
#endif